﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using SIM.Geo.BE;
using System.Linq;

namespace SIM.Geo.DA
{
    public class DACodigoMuestra : Base
    {
        #region Metodos

        /// <summary>
        /// Método que devuelve la lista de CodigoMuestra
        /// </summary>
        /// <returns></returns>
        public List<CodigoMuestra> ListarCodigoMuestra()
        {
            return this.Context.CodigoMuestra.ToList();
        }
        /// <summary>
        /// Método que devuelve la lista de CodigoMuestra
        /// </summary>
        /// <returns></returns>
        public List<listarCodigoMuestraPorRango_Result> ListarCodigoMuestraPorRango(short codigoSerieMuestra, int desde, int hasta)
        {
            return this.Context.listarCodigoMuestraPorRango(codigoSerieMuestra, desde, hasta).ToList();
        }
        /// <summary>
        /// Método devuelve lista codigos generados
        /// </summary>
        /// <returns></returns>
        public List<CodigoMuestra> ListarCodigoMuestraPorCodigos(List<string> codigoMuestras, int codigoSerieMuestra)
        {
            return this.Context.CodigoMuestra.Where(x => codigoMuestras.Contains(x.CodigoMuestra1) && x.CodigoSerieMuestra == codigoSerieMuestra).ToList();
        }
        /// <summary>
        /// Método que devuelve la lista de CodigoMuestra
        /// </summary>
        /// <returns></returns>
        public List<CodigoMuestra> ListarCodigoMuestraPorSerie(short codigoSerieMuestra)
        {
            return this.Context.CodigoMuestra.Where(x => x.CodigoSerieMuestra.Equals(codigoSerieMuestra)).ToList();
        }
        /// <summary>
        /// Método que devuelve la lista de CodigoMuestra
        /// </summary>
        /// <returns></returns>
        public List<CodigoMuestra> ListarCodigoMuestraPorSerieEstado(short codigoSerieMuestra, short codigoEstado)
        {
            return this.Context.CodigoMuestra.Where(x => x.CodigoSerieMuestra.Equals(codigoSerieMuestra) && x.CodigoEstado.Equals(codigoEstado)).ToList();
        }
        /// <summary>
        /// Método que devuelve la lista de CodigoMuestra
        /// </summary>
        /// <returns></returns>
        public List<CodigoMuestra> ListarCodigoMuestraPorSerieEstadoYCodigo(short codigoSerieMuestra, short codigoEstado, string codigoMuestra)
        {
            return this.Context.CodigoMuestra.Where(x => x.CodigoSerieMuestra.Equals(codigoSerieMuestra) && x.CodigoEstado.Equals(codigoEstado) & x.CodigoMuestra1.StartsWith(codigoMuestra)).ToList();
        }
        /// <summary>
        /// Método que devuelve un CodigoMuestra
        /// </summary>
        /// <returns></returns>
        public CodigoMuestra ObtenerCodigoMuestraPorSerieEstadoYCodigo(short codigoSerieMuestra, short codigoEstado, string codigoMuestra)
        {
            return this.Context.CodigoMuestra.Where(x => x.CodigoSerieMuestra.Equals(codigoSerieMuestra) && x.CodigoEstado.Equals(codigoEstado) & x.CodigoMuestra1.Equals(codigoMuestra)).FirstOrDefault();
        }
        /// <summary>
        /// Insertar un nuevo codigo de muestra
        /// </summary>
        /// <param name="codigoMuestra"></param>
        /// <returns></returns>
        public string InsertarCodigoMuestra(CodigoMuestra codigoMuestra)
        {
            this.Context.CodigoMuestra.AddObject(codigoMuestra);
            this.Context.SaveChanges();
            return codigoMuestra.CodigoMuestra1;

        }
        /// <summary>
        /// Modifica un Codigo de muestra
        /// </summary>
        /// <param name="Canal"></param>
        public void ModificarCodigoMuestra(CodigoMuestra codigoMuestra)
        {

            this.Context.CodigoMuestra.Attach(codigoMuestra);
            this.Context.ObjectStateManager.ChangeObjectState(codigoMuestra, EntityState.Modified);
            this.Context.SaveChanges();

        }
        /// <summary>
        /// Elimina Codigo de muestra
        /// </summary>
        /// <param name="labor"></param>
        public void EliminarCodigoMuestra(CodigoMuestra codigoMuestra)
        {
            this.Context.CodigoMuestra.Attach(codigoMuestra);
            this.Context.ObjectStateManager.ChangeObjectState(codigoMuestra, EntityState.Deleted);
            this.Context.SaveChanges();
        }
        /// <summary>
        /// Retorna la lista de Codigo de Muestra
        /// </summary>
        /// <param name="estado"></param>
        /// <param name="serie"></param>
        /// <returns></returns>
        public List<buscarCodigoMuestra_Result> BuscarCodigoMuestra(int codigoEstado, short codigoSerieMuestra)
        {
            return this.Context.buscarCodigoMuestra(codigoEstado, codigoSerieMuestra).ToList();

        }
        /// <summary>
        /// Método que devuelve CodigoMuestra por codigo
        /// </summary>
        /// <param name="codigoRelleno"></param>
        /// <returns></returns>
        public CodigoMuestra ObtenerCodigoMuestra(string codigoMuestra)
        {
            return this.Context.CodigoMuestra.Where(x => x.CodigoMuestra1.Equals(codigoMuestra)).FirstOrDefault();
        }

        /// <summary>
        /// Método que devuelve CodigoMuestra por codigo
        /// </summary>
        /// <param name="codigoSerieMuestra"></param>
        /// <returns></returns>
        public int ObtenerSeguienteCodigoMuestraPorSerie(short codigoSerieMuestra)
        {
            return (int)this.Context.obtenerSeguienteCodigoMuestraPorSerie(codigoSerieMuestra).FirstOrDefault();
        }

        /// <summary>
        /// Método que devuelve CodigoMuestra Completo segun serie y numero ingresado
        /// </summary>
        /// <param name="codigoSerieMuestra"></param>
        /// <param name="codigoBuscar"></param>
        /// <returns></returns>
        public string ObtenerCodigoMuestraGenerado(short codigoSerieMuestra, int numeroBuscar)
        {
            return this.Context.obtenerCodigoMuestraGenerado(codigoSerieMuestra, numeroBuscar).FirstOrDefault();
        }
        #endregion
    }
}
